/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import clases.Asignatura;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Rafa
 */
public class DAO_Asignatura {

    Session sesion = null;

    public DAO_Asignatura() {
        this.sesion = HibernateUtil.getSessionFactory().getCurrentSession();
    }

    public List<Asignatura> consultaAsignaturas(boolean iniciar) {
        List<Asignatura> listaAsignaturas = new ArrayList();
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            //Se realiza la consulta
            Query q = sesion.createQuery("from Asignatura where nombre <> '" + Constantes.getNO_ASIGNATURA() + "'");

            //Se recoge el resultado de la consulta
            listaAsignaturas = (List<Asignatura>) q.list();
        } catch (Exception e) {
            e.printStackTrace();

        }

        return listaAsignaturas;
    }

    public Asignatura consultaAsignatura(String nombre, boolean iniciar) {
        Asignatura asignatura = null;
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            //Se hace la consulta
            Query query = sesion.createQuery("from Asignatura where nombre = '" + nombre + "'");
        //query.setParameter("nombre", nombre);

            //Se recoge el resultado de la consulta
            asignatura = (Asignatura) query.uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();

        }
        return asignatura;
    }

    public Asignatura consultaAsignaturaPorId(String idAsignatura, boolean iniciar) {
        Asignatura asignatura = null;
        try {

            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();
            //Se hace la consulta
            Query query = sesion.createQuery("from Asignatura where idAsignatura = '" + idAsignatura + "'");
        //query.setParameter("nombre", nombre);

            //Se recoge el resultado de la consulta
            asignatura = (Asignatura) query.uniqueResult();
        } catch (Exception e) {
            e.printStackTrace();

        }
        return asignatura;
    }

    public Asignatura insertaAsignatura(String nombre, String carrera, int curso, boolean iniciar) {
        Asignatura asignatura = null;
        try {
            if (iniciar) {
                sesion.beginTransaction();
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            asignatura = new Asignatura(nombre, carrera, curso);

            sesion.save(asignatura);
            sesion.getTransaction().commit();
        } catch (Exception e) {
            if (sesion.getTransaction() != null) {
                sesion.getTransaction().rollback();
            }
            e.printStackTrace();

        }
        return asignatura;
    }

    public boolean eliminaAsignatura(String idAsignatura, boolean iniciar) {
        boolean correcto = false;
        try {
            if (iniciar) {
                sesion.beginTransaction();
                sesion.delete(consultaAsignaturaPorId(idAsignatura, false));
            } else {
                sesion.delete(consultaAsignaturaPorId(idAsignatura, true));
            }
            //sesion.getSessionFactory().getCurrentSession().beginTransaction();

            sesion.getTransaction().commit();
            correcto = true;
        } catch (Exception e) {
            if (sesion.getTransaction() != null) {
                sesion.getTransaction().rollback();
            }
            e.printStackTrace();

        }
        return correcto;
    }
}
